
        <html>
			<head>
			     <title>Remaiten-一个以路由器和IoT设备为目标的Linux bot - virustracker</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/14499">http://drops.wooyun.org/tips/14499</a></h1>
				
      <p>
        <p><a href="http://www.welivesecurity.com/2016/03/30/meet-remaiten-a-linux-bot-on-steroids-targeting-routers-and-potentially-other-iot-devices">http://www.welivesecurity.com/2016/03/30/meet-remaiten-a-linux-bot-on-steroids-targeting-routers-and-potentially-other-iot-devices</a></p>

<h1>0x00 前言</h1>

<hr />

<p>ESET的研究人员正在积极地检测以嵌入式系统为攻击目标的木马，受影响的有路由器，网关和无线访问点。近期，我们已经发现了一个相关的bot，这个bot整合了Tsunami（也叫作Kaiten）和Gafgyt的功能，并相较于前者做出了一些改进，提供了新的功能。这个新威胁就是Linux/Remaiten。截至目前，我们已经发现了三个版本的Linux/Remaiten，版本号分别是2.0，2.1和2.2。根据其代码来看，木马作者称之为“KTN-Remastered”或“KTN-RM”。</p>

<p>在本文中，我们会说明Linux/Remaiten的特殊传播机制，新增功能，以及不同版本之间的差别。</p>

<!--more-->

<h1>0x01 改进后的传播机制</h1>

<hr />

<p>Linux/Gafgyt最突出的功能就是Telnet扫描。在执行Telnet扫描时，木马会尝试通过互联网端口23连接到随机的IP地址。如果连接成功，木马会根据内置的一份用户名/密码列表，尝试猜测登录凭证。登录成功后，木马会发出一个shell命令，下载多个不同架构的bot可执行文件，并尝试运行这些bot。这种感染方式虽然简单，但是会产生很多干扰，因为只有一个二进制能够运行在当前架构下。</p>

<p>Linux/Remaiten通过携带downloader，改进了上述的传播机制。木马的downloader是专门针对嵌入式Linux设备的CPU架构，比如ARM和MIPS。在通过telnet登录了受害设备后，木马会尝试判断设备平台，并传输适用于该平台的downloader。这个downloader的任务是联系CC服务器，请求适用于设备平台的Linux/Remaiten bot二进制。然后，在新的受害设备上运行bot二进制，创建一个新的bot供攻击者使用。</p>

<h1>0x02 技术分析downloader</h1>

<hr />

<p>Linux/Remaiten downloader是一个小型的ELF可执行文件，内嵌在bot二进制中。当执行时，downloader会连接到bot的CC服务器，并发送下面的某个请求，然后另起一行：</p>

<ul>
<li>mips</li>
<li>mipsel</li>
<li>armeabi</li>
<li>armebeabi</li>
</ul>

<p>CC服务器会根据请求的架构，响应一个ELF bot二进制。注意，这里用于连接CC服务器的TCP端口并不是bot的IRC服务器。</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051534357911027.jpg" alt="p2" /> 图1-downloader向CC请求一个bot二进制</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051534372305232.jpg" alt="p3" /> 图2-downloader正在连接CC</p>

<p>downloader的唯一任务就是向CC服务器发送前面提到的某条命令并将响应写入到stdout。在这个例子中，发送的命令是mips。</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051534394383542.jpg" alt="p4" /> 图3-downloader向CC请求一个mips架构的bot</p>

<h1>0x03 bot分析</h1>

<p>在执行时，bot默认在后台运行。使用“-d”命令运行bot时，bot会保持在前台。一旦启动，进程会伪装成合法的名称，比如“-bash” 或“-sh”。我们观察发现，2.0和2.1版本使用的是“-bash” ，2.2版本使用的是“-sh”。</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051534403586152.jpg" alt="p5" /> 图4-bot启动</p>

<p>接下来，函数create_daemon 会创建一个名称是“.kpid”的文件，创建位置是下面的某个预设守护进程目录（第一个具有写入权限），函数还会讲其PID写入到这个文件。</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051534427465063.jpg" alt="p6" /> 图5-守护进程文件目录</p>

<p>如果已经存在“.kpid”文件，根据文件中的PID，运行中的木马进程就会被杀掉。然后，这个文件会被移除，接着，创建新的“.kpid”，并继续执行。</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051534439827373.jpg" alt="p7" /> 图6-跟踪pid文件的创建</p>

<h1>0x04 连接到CC服务器</h1>

<hr />

<p>在bot二进制中，硬编码了一个CC服务器IP地址表。bot会随机选择一个地址，并通过一个硬编码端口连接到选中的CC。不同的变种会使用不同的端口。</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051534451056982.jpg" alt="p8" /> 图7-bot连接一个CC服务器</p>

<p>如果连接成功，bot随后会进入IRC通道。CC则会响应一条welcome信息和后续指令。bot会在受感染设备上解析并执行这些指令。</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051534465938992.jpg" alt="p9" /> 图8-CC响应给bot的欢迎信息</p>

<h1>0x05 处理IRC命令</h1>

<hr />

<p>bot可以处理多种通用的IRC命令。这些命令和函数处理程序都会以阵列的形式列出。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515344871223102.jpg" alt="p10" /> 图9-IRC命令</p>

<p>其中最有意思的是“PRIVMSG”命令。这个命令会要求bot执行一些恶意操作，比如，flooding，下载文件，telnet扫描等。通过“PRIVMSG”发送的命令也是以静态阵列的形式呈现。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515344943067112.jpg" alt="p11" /> 图10-可用的bot命令</p>

<p>大部分的功能都是来自Linux/Tsunami和Linux/Gafgyt。二进制中的下列字符串与恶意行为有关。这些详细的介绍，能让我们知道这些字符串的作用。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515345149201122.jpg" alt="p12" /> 图11-flooding功能</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515345288548132.jpg" alt="p13" /> 图12-Telnet扫描，下载文件，杀掉其他bots</p>

<h1>0x06 内置downloader</h1>

<hr />

<p>我们前面提到过，Linux/Remaiten 的特别之处在于携带了多个小型的downloader，如果有符合受害设备架构的版本，木马就会把相应的downloader传输到设备上。在执行时，downloader会联系CC，请求一个bot二进制。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515345481889142.jpg" alt="p14" /> 图13-内置的有效载荷</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515345561989152.jpg" alt="p15" /> 图14-有效载荷结构</p>

<h1>0x07 Telnet scanner</h1>

<hr />

<p><img src="http://static.wooyun.org//drops/20160405/2016040515345792542162.jpg" alt="p16" /> 图15-猜测telnet登录凭证</p>

<p>当CC发出“QTELNET” 命令时，Remaiten的telnet scanner就会启动。分析发现，木马作者提供的命令描述是正确的：这个telnet的确是一个增强版的Gafgyt telnet scanner。</p>

<p>Telnet扫描是分阶段完成的，可以归结为：</p>

<ol>
<li>选择一个随机的公共IP地址，并将其连接到端口23</li>
<li>尝试用户名/密码组着</li>
<li>确定受害设备的架构</li>
<li>发送并执行相应的downloader</li>
</ol>

<p>木马会通过执行“cat $SHELL”命令来判断设备的架构，并解析其结果。SHELL环境变量中包含有可执行文件的路径，这个可执行文件目前还是作为一个命令行翻译器。如果这个文件是一个ELF可执行文件，则解析文件标头来判断其架构。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515345876628173.jpg" alt="p17" /> 图16-判断受害平台&amp;检查是否有适合该平台的downloader</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515345925835182.jpg" alt="p18" /> 图17-负责解析ELF标头的部分函数</p>

<p>然后，bot会选择合适的有效载荷并发送到新的受害设备上。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515350162323191.jpg" alt="p19" /> 图18-负责根据设备架构选择有效载荷的函数</p>

<p>第一步是找到一个可写入的目录。Linux/Remaiten中有一个常用的可写入路径表。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515350212325201.jpg" alt="p20" /> 图19-downloader的保存目录</p>

<p>创建了几个空的可执行程序：“.t”，“retrieve”和“binary”。“retrieve”文件中会包含有downloader，“binary”是从CC服务器上请求到的bot。似乎2.2版本之前都没有使用“.t”文件。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515350420780211.jpg" alt="p21" /> 图20-准备传输和执行有效载荷</p>

<p>Linux/Remaiten 采用了一种很奇怪的方式来创建空的可执行文件：木马会复制busybox二进制（出现在大多数嵌入式设备上），然后使用>file命令做空这个二进制。</p>

<p>downloader是通过telnet传输的，通过发出echo命令，每个字节都编码了16进制“\x” 转序字节。我们此前就见过有木马利用这种技术在嵌入式Linux设备中进行传播，比如Linux/Moose。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515350551763221.jpg" alt="p22" /> 图21-传输带有echo的有效载荷hexstring</p>

<p>传输完成后，downloader就会启动并获取完整的Linux/Remaiten有效载荷。downloader会从CC请求一个bot二进制，并将其写入到标准输出，而部署命令会把这个输出重定向到“binary” 文件。最后，启动“binary”文件，激活新的IRC bot。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515350798432231.jpg" alt="p23" /> 图22-执行downloader和bot</p>

<h1>0x08 向CC发送状态</h1>

<hr />

<p>在恢复telnet扫描之前，bot会向CC服务器报告其进度。bot会发送新的设备IP，正确的用户名/密码，以及是否感染了其他设备。如果自动感染方式失败，僵尸网络管理员可能会手动感染其他的设备或从不受支持的架构上收集数据？</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515350881780241.jpg" alt="p24" /> 图23-通知CC服务器bot部署状态</p>

<h1>0x09 杀掉其他bot</h1>

<hr />

<p>还有一个很有趣的命令是“KILLBOTS”。发出这个命令后，bot会枚举正在运行的进程，然后会根据一定的标准，主要是进程名称，来决定是忽略还是杀掉这个进程。不同版本的bot可能会选择不同的进程名称。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515351027194251.jpg" alt="p25" /> 图24-需要杀掉的进程名称</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515351195837261.jpg" alt="p26" /> 图25-需要忽略的进程名称</p>

<p>Linux/Remaiten会根据进程的tty设备号，只杀掉由一个交互shell启动的进程。另外，木马还会向CC服务器报告都杀掉了哪些进程，这样所或许是为了修改其进程白名单或黑名单。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515351328799271.jpg" alt="p27" /> 图26-bot正在杀进程</p>

<h1>0x0A Linux/Remaiten变更日志</h1>

<hr />

<p>不同的bot客户端版本之间只是稍有不同，比如，修改进程白名单和黑名单，downloader目录有变化等等。我们有理由怀疑，各个编译版本之间可能会有区别，即使版本号没有变化。在我们分析过的bot中，其downloader二进制都是一样的，但是IP地址和端口有差别。</p>

<p>和Gafgyt一样，v2.2版本仍然会通过执行wget/tftp命令来下载shell脚本，然后，由这个shell脚本下载bot二进制。在传输downloader之前，传播代码首先会尝试这种方法。</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051535149755128.jpg" alt="p28" /> 图27-通知CC通过wget/tftp部署bot</p>

<p>shell脚本是由另一个服务器发布的，这个服务器还会负责发送Gafgyt bot。</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051535163708929.jpg" alt="p29" /> 图28-由另一个服务器发布shell脚本</p>

<p>从al.sh文件来看，这是我们首次发现针对PowerPC和SuperH等平台的bot。虽然，有跨平台编译工具，但是，我们还是很惊讶攻击者会在编译自己的木马时遇到问题。我们不清楚是哪台设备运行在PowerPC或SuperH。</p>

<p><img src="http://static.wooyun.org//drops/20160405/201604051535176223830.jpg" alt="p30" /> 图29-shell脚本下载的bot</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515351884927311.jpg" alt="p31" /> 图30-shell脚本的开头</p>

<p>2.0版本使用的CC服务器给出了一条出乎我们预料的welcome信息：其中引用了一篇MalwareMustDie博客。</p>

<p><img src="http://static.wooyun.org//drops/20160405/2016040515352085951321.jpg" alt="p32" /> 图31-2.0版本的CC引用了MalwareMustDie博客</p>

<p>或许这是为了报复MalwareMustDie 曝光Gafgyt等木马。</p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          